package com.zhu.classfile.attribute;
/**
 * 异常表条目（Exception Table Entry）
 *
 * 对应 JVM 规范中的：
 * {
 *     u2 start_pc;
 *     u2 end_pc;
 *     u2 handler_pc;
 *     u2 catch_type;
 * }
 *
 * 用于表示一个 try-catch 块的字节码映射。
 */
public class ExceptionTableEntry {

    // try 块起始位置（字节码偏移，包含）
    private final int startPc;

    // try 块结束位置（字节码偏移，不包含）
    private final int endPc;

    // catch 块起始位置（字节码偏移）
    private final int handlerPc;

    // 捕获的异常类型（指向常量池中的 CONSTANT_Class_info）
    // 如果为 0，表示捕获所有异常（即 catch (Throwable e)）
    private final int catchType;

    /**
     * 构造函数
     *
     * @param startPc   try 块起始偏移
     * @param endPc     try 块结束偏移（不包含）
     * @param handlerPc catch 块起始偏移
     * @param catchType 异常类在常量池中的索引，0 表示任意异常
     */
    public ExceptionTableEntry(int startPc, int endPc, int handlerPc, int catchType) {
        this.startPc = startPc;
        this.endPc = endPc;
        this.handlerPc = handlerPc;
        this.catchType = catchType;
    }

    // ------------------------
    // Getter 方法
    // ------------------------

    public int getStartPc() {
        return startPc;
    }

    public int getEndPc() {
        return endPc;
    }

    public int getHandlerPc() {
        return handlerPc;
    }

    public int getCatchType() {
        return catchType;
    }

}
